package com.csw.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo03Map {
  def main(args: Array[String]): Unit = {
    /**
      * 转换算子：从一个rdd转换成另一个rdd，是rdd之间的转换
      * 转换算子是懒执行，需要操作（action）算子触发执行
      *
      * 操作算子：触发任务执行，每一个action算子都会触发一个job
      *
      */
    val conf: SparkConf = new SparkConf()
      .setMaster("local")
      .setAppName("map")

    val sc: SparkContext = new SparkContext(conf)

    /**
      * 构建RDD的方式
      * 1、读取文件
      * 2、基于scala集合构建RDD
      */
    val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

    println("map之前")

    //转换算子是懒执行，需要active算子触发执行，每一个action算子都会触发执行一个job

    /**
      * map算子：是一个转换算子，从一个RDD转换到另一个RDD
      *
      * map处理完之后数据的行数不变
      */
    val rdd2: RDD[String] = rdd1.map((i: Int) => {
      println("map:" + i)
      i.toString
    })

    println("map之后")

    //foreach：操作（action）算子，触发job运行，每一个操作算子都会触发一个job
    rdd2.foreach(println)
    rdd2.foreach(println)

    //一直运行，方便查看spark job任务
    while (true){

    }
  }
}
